package edu.seminario

import grails.converters.JSON

import org.codehaus.groovy.grails.web.json.JSONArray;
import org.codehaus.groovy.grails.web.json.JSONObject

class BuscarPorRestosController {

	BusquedaPorRestosService busquedaPorRestosService
	InformationService informationService

	def index = { }

	/**
	 * Viene de esta forma
	 * {user_admin_id: 0, criterios: {nombre: 'pepe', tipo_cocina:0, caracteristicas:0,
	 * 	zona:0, precio:0, cantidad_resultados: 0} }
	 *
	 * Criterios:
	 * Falta poner los criterios
	 *
	 *
	 * Devlvemos de esta forma
	 *
	 * {success: true / false, data: 
	 * 	{	cantidad_muestras: N, resultados_obtenidos: M, total: P,
	 * 		list: [restos1:{nombres:'carlos' ,[mediopago, mediopago2]}, restos2, .....,restosN]
	 * 	} 
	 * }
	 *
	 */
	def buscar = {

//		String json = "{user_admin_id: 1, criterios: {nombre: '', tipo_cocina: 2, caracteristicas:1, zona:2, precio:1, cantidad_resultados: 100} }"
//		JSONObject jsonObject = JSON.parse(json)

		JSONObject jsonObject = JSON.parse(params.json)

		def userAdminId = jsonObject.user_admin_id
		JSONObject criteriosJsonObject = jsonObject.criterios

		def nombre = criteriosJsonObject.nombre
		def tipoCocina = criteriosJsonObject.tipo_cocina
		def caracteristicas = criteriosJsonObject.caracteristicas
		def zona = criteriosJsonObject.zona
		def precio = criteriosJsonObject.precio
		def cantidadResultados = criteriosJsonObject.cantidad_resultados

		Map<String, Criterio> criterios = [:]
		criterios.put("nombre", new Criterio(nombre: "nombre", valor: nombre))
		criterios.put("tipoCocina",new Criterio(nombre: "tipoCocina", valor: informationService.getTipoCocina(tipoCocina)))
		criterios.put("caracteristicas", new Criterio(nombre: "caracteristicas", valor: informationService.getCaracteristicas(caracteristicas)))
		criterios.put("zona",new Criterio(nombre: "zona", valor: informationService.getZona(zona)))
		criterios.put("rangoPrecio",new Criterio(nombre: "precio", valor: informationService.getRangoPrecios(precio)))
		criterios.put("cantidadResultados",new Criterio(nombre: "cantidadResultados", valor: cantidadResultados))

		JSONObject answerJson = new JSONObject()
		try {
			List answer = busquedaPorRestosService.buscar(userAdminId, criterios)

			def totalRestos = Restos.list().size()
			answerJson.put('success', true)
			answerJson.put('cantidad_encontrada', answer.size())
			answerJson.put('total',  totalRestos)

			JSONArray restosJson = new JSONArray()
			answer.each {
				restosJson.add(it.transformToJson())
			}

			answerJson.put('list', restosJson)
		} catch (RuntimeException e) {
			answerJson = new JSONObject()
			answerJson.put('success', false)
			answerJson.put('problem', e.getMessage())
		}

		jsonOutput(answerJson)
	}

	def jsonOutput(Object json) {
		response.setHeader('Content-disposition', 'filename="json"')
		response.contentType = "text/json"
		render json as JSON
	}

	def getTipoCocina = {
		JSONArray tiposCocinaJson = new JSONArray()
		def tiposCocina = informationService.getTipoCocina()
		tiposCocina.each {
			tiposCocinaJson.add(it.transformToJson())
		}
		jsonOutput(tiposCocinaJson)
	}

	def getCaracteristicas = {
		JSONArray caracteristicasJson = new JSONArray()
		def caracteristicas = informationService.getCaracteristicas()
		caracteristicas.each {
			caracteristicasJson.add(it.transformToJson())
		}
		jsonOutput(caracteristicasJson)
	}

	def getZona = {
		JSONArray zonasJson = new JSONArray()
		def zonas = informationService.getZona()
		zonas.each {
			zonasJson.add(it.transformToJson())
		}
		jsonOutput(zonasJson)
	}

	def getRangoPrecio = {
		JSONArray rangoPreciosJson = new JSONArray()
		def rangoPrecios = informationService.getRangoPrecios()
		rangoPrecios.each {
			rangoPreciosJson.add(it.transformToJson())
		}
		jsonOutput(rangoPreciosJson)
	}
}
